package companypay

import (
    "fmt"
	"crypto/tls"
	"wxsdk/wxpay/core"
	. "wxsdk/wxpay"
)

// 企业付款到银行卡
type PayBankReq struct {
	MchId         string   `xml:"mch_id"`           //商户号
	ParnetTradeNo string   `xml:"partner_trade_no"` //商户订单号
	NonceStr      string   `xml:"nonce_str"`        //随机字符串
	Sign          string   `xml:"sign"`             //签名
	EncBankNo     string   `xml:"enc_bank_no"`      //收款方银行卡号
	EncTrueName   string   `xml:"enc_true_name"`    //收款方用户名
	BankCode      string   `xml:"bank_code"`        //收款方开户行
	Amount        string   `xml:"amount"`           //付款金额
	Desc          string   `xml:"desc,omitempty"`   //付款说明
}

type PayBankResponse struct {
	BaseResponse          `xml:",innerXml,omitempty"`
	PartnerTradeNo string `xml:"partner_trade_no"` // 商户订单号
	Amount         int    `xml:"amount"`           // 代付金额
	PaymentNo      string `xml:"payment_no"`       // 微信企业付款单号
	CmmsAmt        int    `xml:"cmms_amt"`         // 手续费金额
}

func PayBank(mchId,appSecret,orderId,encBankNo,encTrueName,bankCode,amountStr,desc,crt,key string) (PayBankResponse,error){
	var (
	    req = new(PayBankReq)
	    rsp PayBankResponse
	)
	cert, err := tls.X509KeyPair([]byte(crt), []byte(key))
	if err != nil {
		return rsp, err
	}
	tlsConfig := &tls.Config{
		Certificates: []tls.Certificate{cert},
	}
	client := core.GetWxCoPayClient(appSecret,tlsConfig)
	//
	req.MchId = mchId               //商户号
	req.ParnetTradeNo = orderId    //商户订单号
	req.EncBankNo = encBankNo          //收款方银行卡号
	req.EncTrueName = encTrueName //收款方用户名
	req.BankCode = bankCode      //收款方开户行
	req.Amount = amountStr      // 付款金额
	req.Desc = desc             //付款说明
	serverUrl := fmt.Sprintf("https://api.mch.weixin.qq.com/mmpaysptrans/pay_bank")
	err = client.Excute(serverUrl, req, &rsp, true)
    if err != nil {
		return rsp, err
	}
	return rsp, nil
}

	
	